package cn.edu.lingnan.dao;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class StudentMapperProxy1 implements InvocationHandler {
    private Object target;

    public void setTarget(Object target) {
        this.target = target;
    }

    public Object getProxy() {
        return Proxy.newProxyInstance(this.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
    }    //处理代理实例，并返回结果

    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        log(Thread.currentThread().getStackTrace()[1].getMethodName());
        Object result = method.invoke(target, args);//这个studentMapper(target)接口里面的所有方法都会被动态代理，就不需要像静态代理那样重新再写一遍了，因为那样子有点像是重写。
        return result;
    }    //提取公共的操作，例如增加一个日志方法

    public void log(String msg) {
        System.out.println("[Debug] 执行了" + msg + "方法");
    }
}
